#include <iostream>
#include <memory>
// 3

class Test
{
public:
    Test()
    {
        std::cout << "构造函数\n";
    }
    ~Test()
    {
        std::cout << "析构函数\n";
    }
    void show()
    {
        std::cout << "herlloword" << std::endl;
    }
};

int main()
{
    std::shared_ptr<Test> p = std::make_shared<Test>();
    std::cout<<p.use_count()<<std::endl;
    // 弱指针是共享指针的附庸，不会引起引用计数器的变化
    std::weak_ptr<Test> p2 = p;
    p2.lock()->show(); // 会返回一个指向该对象的共享指针,如果该对象已经释放，则返回空指针
    std::cout<<p.use_count()<<std::endl;
    return 0;
}
